package com.shareyi.baseproject.kernel.common.event;

/**
 * 事件管理器相关
 *
 * @author qiulong
 * @date 2018.12.12
 */
public interface EventManager {

    /**
     * 发布一个事件
     *
     * @param topic 事件主题
     * @param event 事件
     */
    void pub(String topic, Event event);

    /**
     * 订阅一个事件
     *
     * @param topic      事件主题
     * @param subscriber 事件订阅者
     */
    void sub(String topic, SubscribeAware subscriber);

    /**
     * 订阅一个事件
     *
     * @param topic            事件主题
     * @param subscriber       事件订阅者
     * @param exceptionHandler 事件异常处理
     */
    void sub(String topic, SubscribeAware subscriber, EventExceptionHandler exceptionHandler);

    /**
     * 取消订阅
     *
     * @param topic
     * @param subscriber
     */
    void unsub(String topic, SubscribeAware subscriber);
}
